#pragma comment(linker, "/STACK:100000000")
#include <stdio.h>
#include <algorithm>
using namespace std;
long long A=1992919, B=18181971;
FILE *f;
char s[20];
int ts=1;
int next()
{
	A=(A*13166771+B)%1000000007;
	B=(B*67771+A)%1000000007;
	return A;
}
void createtest() { sprintf(s, "%03d", ts); ts++; f=fopen(s, "w"); }
void shuffle(int *a, int n)
{
	for(; n; swap(a[n-1], a[next()%n]), n--);
}
void gen0()
{
	createtest();
	fprintf(f, "2\n0 3\n2 1\n");
	createtest();
	fprintf(f, "2\n2 1\n3 0\n");
	createtest();
	fprintf(f, "3\n4 2 3\n7 1 5\n6 8 0\n");
	createtest();
	fprintf(f, "2\n1 2\n3 0\n");
	createtest();
	fprintf(f, "2\n0 3\n1 2\n");
}
#define N 55
int a[N][N];
void out(int n)
{
	createtest();
	int i, j;
	fprintf(f, "%d\n", n);
	for(i=0; i<n; i++)
		for(j=0; j<n; fprintf(f, "%d%c", a[i][j], j<n-1?' ':'\n'), j++);
}
void gen1(int n)
{
	int i, u[N*N];
	for(i=0; i<n*n; u[i]=i, i++);
	shuffle(u, n*n);
	for(i=0; i<n*n; a[i/n][i%n]=u[i], i++);
	out(n);
}
void gen2(int n)
{
	int i, u[N*N];
	for(i=0; i<n*n; u[i]=i, i++);
	shuffle(u, n*n);
	for(i=0; i<n*n; a[i/n][i%n]=u[i], i++);
	out(n);
	swap(a[0][0], a[0][1]);
	out(n);
}
void gen3(int n)
{
	int i;
	for(i=0; i<n*n; a[i/n][i%n]=(i+1)%(n*n), i++);
	out(n);
}
void gen4(int n)
{
	int i;
	for(i=0; i<n*n; a[i/n][i%n]=(n*n-i)%(n*n), i++);
	out(n);
}
void gen5(int n)
{
	int i;
	for(i=0; i<n*n; a[i/n][i%n]=i, i++);
	out(n);
}
void gen6(int n)
{
	int i, j, k, t;
	for(i=0; i<n*n; a[i/n][i%n]=(i+1)%(n*n), i++);
	for(i=n-1, j=n-1, t=0; t<1000000; t++)
	{
		k=next()%4;
		if(k==0 && i>0) { swap(a[i][j], a[i-1][j]); i--; }
		else if(k==1 && i<n-1) { swap(a[i][j], a[i+1][j]); i++; }
		else if(k==2 && j>0) { swap(a[i][j], a[i][j-1]); j--; }
		else if(k==3 && j<n-1) { swap(a[i][j], a[i][j+1]); j++; }
	}
	out(n);
}
int main()
{
	int i;
	gen0();
	for(i=0; i<10; gen1(2), i++);
	for(i=0; i<20; gen1(3), i++);
	for(i=0; i<20; gen2(3), i++);
	for(i=0; i<10; gen1(4), i++);
	for(i=0; i<10; gen2(4), i++);
	gen1(5);
	gen2(5);
	gen1(6);
	gen2(6);
	gen1(10);
	gen2(10);
	for(i=0; i<5; gen1(50), i++);
	for(i=0; i<5; gen2(50), i++);
	gen3(50);
	gen4(50);
	gen5(50);
	gen6(30);
	gen6(40);
	gen6(45);
	gen6(50);
	return 0;
}